using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ShootThemUp.Sources.GameElements.Ships.Ennemies.Waves;
using ShootThemUp.Sources.GameElements.Ships.Ennemies.Waves.Trajectories;
using ShootThemUp.Sources.GameElements.Ships.Ennemies.Fruits;
using Microsoft.Xna.Framework;

namespace ShootThemUp.Sources.Factories
{
    static class LevelFactory
    {
        private const int MIN_RAND_TIME = 500;
        private const int MAX_RAND_TIME = 3000;
        public const int LEVEL1_DURATION = 125000;

        /// <summary>
        /// Generate a random time.
        /// </summary>
        /// <returns>A random time.</returns>
        private static int randTime(){

            Random rand = new Random();
            return rand.Next(MAX_RAND_TIME - MIN_RAND_TIME) + MIN_RAND_TIME;
        }

        /// <summary>
        /// Create the level 1 waves.
        /// </summary>
        /// <param name="waveIndex">Index of the current wave.</param>
        /// <returns>All the waves of the level.</returns>
        public static List<Wave> Level1(int waveIndex)
        {
            List<Wave> waves = new List<Wave>();

            Wave wave1 = new Wave(new HorizontalTrajectory(100, true), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 3000, 1000, 0.1f);

            wave1.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave1.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));

            Wave wave2 = new Wave(new LemniscateTrajectory(new Vector2(220, 230), 300, 200), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 7000, 500, 0.0009f);

            wave2.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave2.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave2.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave2.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave2.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave2.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));

            Wave wave3 = new Wave(new ParaboleSemiCubiqueTrajectory(0, 100, 24, true), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 9000, 500, 0.001f);

            wave3.Add(FruitFactory.GrowFruit(FruitType.Orange, LevelFactory.randTime()));

            Wave wave4 = new Wave(new OvalTrajectory(new Vector2(120, 260), 300, 300), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 12000, 500, 0.001f);

            wave4.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave4.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave4.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave4.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave4.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave4.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));


            Wave wave5 = new Wave(new HorizontalTrajectory(380, true), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 17000, 2000, 0.1f);

            wave5.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave5.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave5.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave5.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave5.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave5.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));


            Wave wave6 = new Wave(new HorizontalTrajectory(300, false), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 18000, 5000, 0.06f);

            wave6.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave6.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave6.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave6.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));


            Wave wave7 = new Wave(new ParaboleSemiCubiqueTrajectory(0, 100, 24, true), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 20000, 500, 0.001f);

            wave7.Add(FruitFactory.GrowFruit(FruitType.Orange, LevelFactory.randTime()));

            Wave wave8 = new Wave(new ParaboleSemiCubiqueTrajectory(480, 100, 24, false), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 20000, 500, 0.001f);

            wave8.Add(FruitFactory.GrowFruit(FruitType.Orange, LevelFactory.randTime()));

            Wave wave9 = new Wave(new LemniscateTrajectory(new Vector2(220, 300), 300, 200), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 20000, 500, 0.001f);

            wave9.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave9.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave9.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave9.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave9.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave9.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave9.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave9.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave9.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave9.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave9.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));

            Wave wave10 = new Wave(new LemniscateTrajectory(new Vector2(300, 250), 200, 120), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 20000, 500, 0.001f);

            wave10.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave10.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave10.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave10.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave10.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave10.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave10.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave10.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave10.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave10.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));


            Wave wave11 = new Wave(new OvalTrajectory(new Vector2(100, 260), 300, 300), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 30000, 500, 0.001f);

            wave11.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave11.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave11.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave11.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave11.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave11.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave11.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));

            Wave wave12 = new Wave(new HorizontalTrajectory(100, false), 32000, ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 5000, 0.06f);

            wave12.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave12.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave12.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave12.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave12.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave12.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));


            Wave wave13 = new Wave(new HorizontalTrajectory(200, true), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 33000, 5000, 0.06f);

            wave13.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave13.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave13.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave13.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave13.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave13.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));

            Wave wave14 = new Wave(new ParaboleSemiCubiqueTrajectory(0, 100, 24, true), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 34000, 500, 0.001f);

            wave14.Add(FruitFactory.GrowFruit(FruitType.Orange, LevelFactory.randTime()));

            Wave wave15 = new Wave(new HorizontalTrajectory(320, true), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 37000, 5000, 0.06f);

            wave15.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave15.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave15.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));


            Wave wave16 = new Wave(new HorizontalTrajectory(222, false), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 37000, 5000, 0.06f);

            wave16.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave16.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave16.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));

            Wave wave35 = new Wave(new OvalTrajectory(new Vector2(100, 260), 300, 300), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 42000, 500, 0.001f);

            wave35.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave35.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave35.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave35.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave35.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave35.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave35.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));

            Wave wave17 = new Wave(new LemniscateTrajectory(new Vector2(27, 120), 120, 222), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 42000, 500, 0.001f);

            wave17.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave17.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));

            Wave wave18 = new Wave(new LemniscateTrajectory(new Vector2(350, 400), 200, 120), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 52000, 500, 0.001f);

            wave18.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave18.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave18.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave18.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave18.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave18.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave18.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave18.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave18.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave18.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave18.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave18.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave18.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave18.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave18.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave18.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave18.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));

            Wave wave26 = new Wave(new LemniscateTrajectory(new Vector2(100, 400), 200, 120), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 62000, 500, 0.001f);

            wave26.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave26.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave26.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave26.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave26.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave26.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave26.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave26.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave26.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave26.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave26.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave26.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave26.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave26.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave26.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave26.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave26.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));

            Wave wave19 = new Wave(new ParaboleSemiCubiqueTrajectory(0, 100, 24, true), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 44000, 500, 0.001f);

            wave19.Add(FruitFactory.GrowFruit(FruitType.Orange, LevelFactory.randTime()));

            Wave wave20 = new Wave(new ParaboleSemiCubiqueTrajectory(470, 100, 24, false), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 45000, 500, 0.001f);

            wave20.Add(FruitFactory.GrowFruit(FruitType.Orange, LevelFactory.randTime()));

            Wave wave21 = new Wave(new ParaboleSemiCubiqueTrajectory(0, 200, 34, true), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 46000, 500, 0.001f);

            wave21.Add(FruitFactory.GrowFruit(FruitType.Orange, LevelFactory.randTime()));

            Wave wave22 = new Wave(new ParaboleSemiCubiqueTrajectory(470, 200, 34, false), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 47000, 500, 0.001f);

            wave22.Add(FruitFactory.GrowFruit(FruitType.Orange, LevelFactory.randTime()));

            Wave wave23 = new Wave(new ParaboleSemiCubiqueTrajectory(220, 100, 1, true), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 48000, 500, 0.001f);

            wave23.Add(FruitFactory.GrowFruit(FruitType.Orange, LevelFactory.randTime()));

            Wave wave24 = new Wave(new ParaboleSemiCubiqueTrajectory(220, 100, 1, false), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 55000, 500, 0.001f);

            wave24.Add(FruitFactory.GrowFruit(FruitType.Orange, LevelFactory.randTime()));

            Wave wave27 = new Wave(new ParaboleSemiCubiqueTrajectory(10, 00, 44, true), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 56000, 500, 0.001f);

            wave27.Add(FruitFactory.GrowFruit(FruitType.Orange, LevelFactory.randTime()));

            Wave wave28 = new Wave(new ParaboleSemiCubiqueTrajectory(370, 00, 24, false), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 60000, 500, 0.001f);

            wave28.Add(FruitFactory.GrowFruit(FruitType.Orange, LevelFactory.randTime()));

            Wave wave29 = new Wave(new ParaboleSemiCubiqueTrajectory(50, 200, 34, true), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 65000, 500, 0.001f);

            wave29.Add(FruitFactory.GrowFruit(FruitType.Orange, LevelFactory.randTime()));

            Wave wave30 = new Wave(new ParaboleSemiCubiqueTrajectory(470, 120, 34, false), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 67000, 500, 0.001f);

            wave30.Add(FruitFactory.GrowFruit(FruitType.Orange, LevelFactory.randTime()));

            Wave wave31 = new Wave(new ParaboleSemiCubiqueTrajectory(220, 500, 1, true), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 70000, 500, 0.001f);

            wave31.Add(FruitFactory.GrowFruit(FruitType.Orange, LevelFactory.randTime()));

            Wave wave32 = new Wave(new HorizontalTrajectory(333, true), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 70000, 2000, 0.06f);

            wave32.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave32.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave32.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave32.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave32.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave32.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave32.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave32.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave32.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave32.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave32.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave32.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave32.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave32.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave32.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave32.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));


            Wave wave33 = new Wave(new HorizontalTrajectory(422, false), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 70000, 2000, 0.06f);

            wave33.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave33.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave33.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave33.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave33.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave33.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave33.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave33.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave33.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave33.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave33.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave33.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave33.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave33.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave33.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));

            Wave wave34 = new Wave(new HorizontalTrajectory(300, false), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 82000, 3000, 0.06f);

            wave34.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave34.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave34.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave34.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave34.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave34.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave34.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave34.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave34.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave34.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));

            Wave wave25 = new Wave(new HorizontalTrajectory(457, false), ((waveIndex - 1) * LevelFactory.LEVEL1_DURATION) + 82000, 3000, 0.06f);

            wave25.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave25.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave25.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave25.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave25.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave25.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave25.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave25.Add(FruitFactory.GrowFruit(FruitType.Cherry, LevelFactory.randTime()));
            wave25.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));
            wave25.Add(FruitFactory.GrowFruit(FruitType.Pear, LevelFactory.randTime()));

            waves.Add(wave1);
            waves.Add(wave2);
            waves.Add(wave3);
            waves.Add(wave4);
            waves.Add(wave5);
            waves.Add(wave6);
            waves.Add(wave7);
            waves.Add(wave8);
            waves.Add(wave9);
            waves.Add(wave10);
            waves.Add(wave11);
            waves.Add(wave12);
            waves.Add(wave13);
            waves.Add(wave14);
            waves.Add(wave15);
            waves.Add(wave16);
            waves.Add(wave17);
            waves.Add(wave18);
            waves.Add(wave19);
            waves.Add(wave20);
            waves.Add(wave21);
            waves.Add(wave22);
            waves.Add(wave23);
            waves.Add(wave24);
            waves.Add(wave25);
            waves.Add(wave26);
            waves.Add(wave27);
            waves.Add(wave28);
            waves.Add(wave29);
            waves.Add(wave30);
            waves.Add(wave31);
            waves.Add(wave32);
            waves.Add(wave33);
            waves.Add(wave34);
            waves.Add(wave35);

            return waves;
        }
    }
}
